package com.flowershop.utils;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

import org.springframework.web.multipart.MultipartFile;

public class FileUtils {
    
    /**
     * 保存上传的文件
     * @param file 上传的文件
     * @param baseDir 基础目录
     * @param type 文件类型（子目录）
     * @return 文件相对路径
     * @throws IOException
     */
    public static String saveFile(MultipartFile file, String baseDir, String type) throws IOException {
        // 生成文件名
        String originalFilename = file.getOriginalFilename();
        String extension = originalFilename != null ? 
            originalFilename.substring(originalFilename.lastIndexOf(".")) : ".jpg";
        String fileName = UUID.randomUUID().toString() + extension;
        
        // 按日期生成子目录
        String datePath = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
        String relativePath = type + "/" + datePath;
        
        // 规范化基础目录路径
        baseDir = baseDir.replace('\\', '/');
        if (baseDir.endsWith("/")) {
            baseDir = baseDir.substring(0, baseDir.length() - 1);
        }
        
        // 构建完整路径
        String fullPath = baseDir + "/" + relativePath;
        
        // 创建目录
        File dir = new File(fullPath);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        
        // 保存文件
        Path filePath = Paths.get(fullPath, fileName);
        Files.copy(file.getInputStream(), filePath);
        
        // 返回相对路径（不包含 uploads 目录）
        return relativePath + "/" + fileName;
    }
    
    /**
     * 删除文件
     * @param baseDir 基础目录
     * @param relativePath 相对路径
     * @return 是否删除成功
     */
    public static boolean deleteFile(String baseDir, String relativePath) {
        if (relativePath == null || relativePath.isEmpty()) {
            return false;
        }
        
        // 规范化基础目录路径
        baseDir = baseDir.replace('\\', '/');
        if (baseDir.endsWith("/")) {
            baseDir = baseDir.substring(0, baseDir.length() - 1);
        }
        
        Path path = Paths.get(baseDir, relativePath);
        try {
            return Files.deleteIfExists(path);
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }
} 